package com.liyafeng.c;

public class CPU {

    /**
     * 中央处理器（CPU，Central Processing Unit）
     *
     * ===========指令集 ISA====================
     * 指令集架构（英语：Instruction Set Architecture，缩写为ISA），
     * 指令集 = 指令集体系  = 指令集架构 = 指令集体系架构 = 微处理器指令集架构
     * CPU架构就是指令集架构
     *
     * 是给写汇编软件（编译器）的同事看的，让他们知道如何输出正确功能的机器码
     *
     * （cpu架构图见 cpu_architecture.jpg）
     * cpu有引脚，内存中向cpu输入指令，和数据， 指令寄存器存储指令序列，还有指令计数器
     * 还有存储单元和运算单元，控制指令从存储单元取数据，一起进入运算单元，计算完毕后输出数据
     *
     * cpu接收01数据，然后通过与或非门进行逻辑输出
     * 所以cpu支持多少指令是由他的结构决定的
     *
     * ISA规则中包括（定义了）执行模型，处理器寄存器，地址和数据格式
     *
     * 所以指令集只是对应机器语言（就是这个指令集0101表示加 ，那个指令集1010表示加）
     *
     *
     * ---------指令集的种类-------------------
     * CISC指令集，复杂指令集 英文名是CISC，Complex Instruction Set Computer的缩写
     * RISC指令集 精简指令集 Reduced Instruction Set Computing  的缩写
     * 复杂指令集的特点是指令数目多而复杂，每条指令字长并不相等，
     *  计算机必须加以判读，并为此付出了性能的代价。
     * ----------------arm-------------------
     * https://zhuanlan.zhihu.com/p/38358532
     * arm(英国芯片设计公司)
     * ARM成立于1991年，是一家出售IP（技术知识产权）的公司，所谓的技术知识产权，有点像卖房屋的结构设计图，
     * 至于要怎么修改，哪边开窗户，以及要怎么添加其它的花园，则由买了设计图的厂商自己决定。
     *
     * 而ARM的架构是采用（基于）RISC架构，如同它的名称一样，Advanced RISC Machines
     * 这里只是arm公司设计的cpu架构，而具体生产制造是他授权给其他公司的
     * 三星的蜂鸟（Hummingbird）、猎户座（Orion）联发科 等公司来实现这个架构的处理器
     *
     * 性能高、成本低和能耗省,所以很快占领移动设备市场
     *
     * -------------------x86----------------
     * X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称，
     * 包括Intel8086、80186、80286、80386以及80486以86结尾系列
     *
     * x86架构基于CISC（）
     *
     * x86和arm都是一种处理器架构，x86基于 CISC arm基于RISC
     *
     * CISC指令集多，性能高（处理速度快），但是功耗高，设计难度高
     * 指令多，代表cpu能处理的指令多，比如我们有个乘法的指令，
     * 直接输出结果。但是RISC 只有加法指令，那么要循环多次加法执行才能输出结果
     * 这样导致速度慢。  CISC的乘法指令内部设计更复杂，导致功耗高，设计难度高
     *
     * -------------------------
     *
     * -----------生产cpu的公司------------------
     * intel
     * amd
     * --------------架构与指令集-------------
     * 不同的架构可以实现同一种指令集
     * x86架构就代表实现了x86指令集的cpu
     *
     * -------------------------
     * intel 发明了x86指令集和 x86 架构的处理器
     * amd 拿到了可以使用x86指令集的授权，生产了自己的x86架构的cpu
     * （当然内部实现原理intel是不会给你的，要不两家都可以生产一模一样的cpu了，
     * 所以amd有自己的物理实现）
     *
     * 后来intel搞了 ia64=x64=intel architecture 64 指令集和cpu
     * 但是和x86指令集不兼容，就是用x86指令集不能运行在新的ia64架构的cpu上
     * 所以放弃了
     * 后来amd搞了兼容 x86指令集的 新指令集，叫x86-64=amd64 和cpu
     * 这个很好，所以intel后来也被授权用了这种指令集
     *
     * 所以我们基于x86指令集写的汇编编译的机器码，也能在x86-64的cpu上运行
     *
     * x86目前泛指x86和x86-64架构（因为x86-64架构的cpu完全兼容x86指令集）
     *
     * x86（x86或x86-64架构）的主要产品有Intel的至强，酷睿，奔腾，赛扬和凌动
     *
     * x64指令集和x64架构已经被放弃，安腾处理器用的这个架构
     *
     * -----------------------
     * arm公司
     * arm是risc的典型代表，但是外加了一部分cisc
     * 便宜低功耗
     * ARM架构的cpu的比X86架构的cpu耗电少
     * ------------------
     * mips公司
     * 也是risc的代表，授权门槛极低，所以我们拿到他们公司的指令集授权就可以
     * 生产自己的CPU了， mips架构cpu主要用在嵌入式领域，比如路由器。
     * 中国的龙芯是mips架构
     *
     *  纯计算能力很强
     * ------------------------------
     *
     *
     * x86指令集是一种CISC指令集
     *
     * x86架构是代表 x86指令集 的一种物理实现方式
     * 于1978年推出的Intel 8086（型号名称）中央处理器中首度出现
     *
     *
     *
     *
     *
     * ===========微架构（英语：microarchitecture）===============
     * 微架构 = 微体系架构 = CPU电路结构 = CPU架构，是一种指令集的实现方式
     * 比如指令集说1100 0001 0001 代表 add 1 1
     * 那么微架构就要当输入这个机器码的时候实现1加1的功能并输出
     *
     * 不同的cpu物理结构对应不同指令集，不同cpu物理结构可以实现相同的指令集
     *
     *
     *
     * ===============汇编语言====================
     * 就是我们能看懂的低级语言，一种汇编语言对应一种架构的
     *
     * ===========应用二进制接口（英语：application binary interface，缩写为 ABI）=========
     * 其实就是指的某种特定的指令集，比如 x86指令集 ，armabi-v7a指令集、mips指令集
     *
     * ====================CPU执行过程========
     * https://zhuanlan.zhihu.com/p/20900243 （CPU怎样对存储器们进行读写？）
     * cpu 功能就是执行 指令 和操作数，计算出结果
     * 还有地址总线，数据总线，控制线连接着内存，
     * 从内存中读取指令和数据，执行，然后写入内存的指定位置
     *
     *
     * ===============可执行文件===========
     * 可执行文件内，含有以二进制编码的微处理器指令
     * 这些二进制微处理器指令的编码，于各种微处理器有所不同，故此可执行文件多数要分开不同的微处理版本
     * 一个电脑文件是否为可执行文件，主要由操作系统的传统决定。例如根据特定的命名方法（如扩展名为exe）或文件的元数据信息（例如UNIX系统设置“可执行”权限）
     *
     * ==========具体编译流程见Compile.java=========
     *
     *
     * @param args
     */
    public static void main(String[] args) {

    }


    /**
     *
     * =============cpu与内存大小============
     * https://www.cnblogs.com/little-YTMM/p/5058354.html （关于CPU位数，OS位数以及内存大小关系的一点总结）
     * 使用计算机时，其支持的最大内存是由操作系统和硬件两方面决定的
     * 最大内存由cpu地址总线位数决定
     *
     * 在早期的PC机中，采用的是三总线结构：数据总线，地址总线和控制总线。分别来实现不同的功能：数据总线用来传输数据，
     * 地址总线用来传输地址，控制总线用来传输一些控制信号。但在现在的PC机中，一般使用了总线复用功能。如在PCI总线中，
     * 地址总线和数据总线总是分时复用的（也就是说假如PCI总线有32为数据总线，这32位数据总线在某个时刻传输数据，
     * 在下一个时刻却用来充当地址总线的作用）
     *
     * 在计算机中地址总线的数目决定了CPU的寻址范围，这种由地址总线对应的地址称为 物理地址
     *  CPU的地址总线数目 决定了CPU 的寻址范围，这种由地址总线对应的地址称作为物理地址
     *
     *  CPU有32根地址总线
     *  （一般情况下32位的CPU的地址总线是32位，也有部分32位的CPU地址总线是36位的，比如用做服务器的CPU）
     *  那么提供的可寻址物理地址范围 为 2^32=4GB
     *
     * （在这里要注意一点，我们平常所说的32位CPU和64位CPU指的是CPU一次能够处理的数据宽度，即位宽，不是地址总线的数目）
     * 所以处理器的位数和内存大小没直接关系，处理器地址总线才和内存大小有关系
     *
     * 自从64位CPU出现之后，一次便能够处理64位的数据了，其地址总线一般采用的是36位或者40位（即CPU能够寻址的物理地址空间为64GB或者1T）
     *
     * -----------物理地址，线性地址，逻辑地址
     * 这三种地址关系为，逻辑地址经过段式映射（Segmentation Translation）到线性地址。线性地址经过页面映射（Page Translation）后，得到物理地址。
     *
     *
     * 如对于32位的操作系统而言，其逻辑地址编码采用的地址位数是32位，那么操作系统所提供的逻辑地址寻址范围为：232 = 22 * 230 = 4GB（所以在32位CPU和32位的操作系统中，
     * 最大支持的内存为4G）。但是理论上是4G的内存，在我们真正使用时并不到4G，大约只有3.2G左右。这是因为在intel x86架构下，
     * 采用的是内存映射技术(Memory-Mapped I/O, MMIO)，
     * 也就说将4GB逻辑地址中一部分要划分出来与BIOS ROM、CPU寄存器、I/O设备这些部件的物理地址进行映射，
     * 那么逻辑地址中能够与内存条的物理地址进行映射的空间肯定没有4GB了
     *
     *
     */
    void a1(){}
}
